package br.cnpq.webflowah.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.mindswap.owl.vocabulary.XSD;

public class Conceito implements Serializable {

	private static final long serialVersionUID = 1L;
		
	private String nome = null;
	
	private String uri = null;
	
	private Conceito tipo = null;
		
	private List<Conceito> associacoes = new ArrayList<Conceito>();
	
	private String predicado = null;
	
	private boolean primitivo = false;
	
	private String anotacao = null; 
		
	private List<Conceito> propriedades = new ArrayList<Conceito>();
	
	public Conceito() {		
	}
	
	public Conceito(String nome, String uri) {
		this.nome = nome;
		this.uri = uri;
	}
	
	public void addPropriedade(Conceito c) {
		this.propriedades.add(c);
	}
	
	public void removePropriedade(String uri) {
		for (int i=0; i < propriedades.size(); i++) {
			Conceito propriedade = (Conceito) propriedades.get(i);
			if (uri.equals(propriedade.getURI())) { 
				propriedades.remove(i);
				return;
			}
		}
	}
		
	public Conceito getPropriedade(String uri) {
		for (int i=0; i < propriedades.size(); i++) {
			Conceito propriedade = (Conceito) propriedades.get(i);
			if (uri.equals(propriedade.getURI())) 
				return propriedade;
		}
		return null;		
	}
	
	public List getPropriedades() {
		return this.propriedades;
	}
	
	public void addAssociacao(Conceito c) {
		this.associacoes.add(c);
	}
	
	public void removeAssociacao(String uri) {
		for (int i=0; i < associacoes.size(); i++) {
			Conceito associacao = (Conceito) associacoes.get(i);
			if (uri.equals(associacao.getURI())) { 
				associacoes.remove(i);
				return;
			}
		}
	}
		
	public Conceito getAssociacao(String uri) {
		for (int i=0; i < associacoes.size(); i++) {
			Conceito associacao = (Conceito) associacoes.get(i);
			if (uri.equals(associacao.getURI())) 
				return associacao;
		}
		return null;
	}
	
	public List getAssociacoes() {
		return this.associacoes;
	}
	
	public void setAssociacoes(List<Conceito> list) {
		this.associacoes = list;
	}
	
	public String getNome() {
		return this.nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public Conceito getTipo() {
		return this.tipo;
	}
	
	public void setTipo(Conceito tipo) {
		this.tipo = tipo;
	}
	
	public String getURI() {
		return this.uri;
	}
	
	public void setURI(String uri) {
		this.uri = uri;
	}
	
	public void setTipoPrimitivo(boolean flag) {
		this.primitivo = flag;
	}
	
	public boolean isTipoPrimitivo() {
		return this.primitivo;
	}
	
	public String toString() {
		return this.nome;
	}

	public String getPredicado() {
		return predicado;
	}

	public void setPredicado(String predicado) {
		this.predicado = predicado;
	}

	public String getAnotacao() {
		return anotacao;
	}

	public void setAnotacao(String anotacao) {
		if (anotacao == null || anotacao.equals("null")) return;
		this.anotacao = anotacao;
		this.primitivo = anotacao.contains(XSD.ns);
	}
	
}
